A typical computer executes several user applications simultaneously. For example, users often have an e-mail program, a web browser, document-processing software, spreadsheets and even virtual machines running on one computing device at the same time. Further, each user application may require the operation of multiple tasks such as receiving and/or sending data from/to the computer's storage (i.e., memory, internal drives, etc.) or a network (e.g., the Internet), performing logic operations on the main processor, processing and rendering audio and video, and/or performing operations on a co-processor. Each of these tasks is executed by the computer as one or more processes. The tasks associated with non-user applications such as the computer's operating system are also executed as various processes. For example, the Windows XP operating system generally runs up to 80 processes simultaneously, even when only a few user applications are operating.
The performance of a process, and as a result, the performance of the application associated with the process, is related to the resources required to execute the process and the availability of the those resources. The resources commonly include the number of processors (also called CPUs) in the computer, the CPU speed, cache-memory size and speed, latency of main memory and/or disk access, availability of network ports, and co-processor speed. Overall resource availability is inversely related to the number of processes being executed by the computer, the sharing of the computer's resources during a certain time period, and, in some cases, to a priority assigned to a particular process or application. The process priority influences resource sharing such that the higher the process priority, the more quickly and frequently resources made available to the process, thereby increasing the performance of the process and the associated application. In conventional systems, the priority is assigned by the operating system, and in certain instances a user may manually alter these priorities.
However, the operating system lacks critical knowledge of how best to assign priorities to different user applications and the associated processes in order to optimize the user experience. Therefore, the operating system generally assigns the same priority to all user applications and the corresponding processes. As a result, when the computer runs several processes simultaneously, the performance of all user applications tends to be substantially similar. This, however, is sometimes inconsistent with a user's preferences, and likely does not consider the actual processing requirements of the application or process. For example, a business user may ascribe a higher priority to a data analysis and/or e-mail application than a web browser or a power-usage-monitoring application. Similarly, a home user may want an instant messaging application and a voice-over-IP (VoIP) application to utilize a greater share of the CPU than a document-processing application.
In order to improve the performance of a computer system, some systems employ CPU or task scheduling. In these systems algorithms such as first-in-first-out (FIFO), shortest-job first, round-robin scheduling, priority scheduling, and multi-level queue scheduling are employed to determine the order in which tasks are scheduled and executed. The objective of these methods, however, is to improve the performance of the overall computer system, and not to improve the performance (e.g., the total execution time, response time, etc.) of a particular user application. Moreover, these systems and methods only account for the characteristics of the various tasks being executed and do not consider the user's preferences or other environmental factors. Therefore, a user may feel that a certain application does not perform as well as expected, and the user may mistakenly believe he needs to upgrade to a more expensive computer having a more powerful processor and/or more memory.
Some systems allow a user to lower the priority of a particular process, so that the performance of the other processes can improve. But, such a method presents several problems to a user. First, the user must determine which processes are associated with which application. Second, the user must identify many applications for which she does not expect high performance, and lower the priorities of the processes associated with those applications. Finally, once the user lowers the priority of a process, it cannot be increased later, even if the user changes her preference. In sum, such an approach requires the user to have significant technical knowledge about their applications and operating system, and requires constant manual intervention.
Some other systems identify an active application (e.g., an application in the window of which the user clicked recently) and increases the priorities of the processes associated with that application. Such a system may not comport with a user expectation, however, if the user prefers that a background application such as data analysis have high performance, while user actively engages with another application such as web browser only while waiting for the data analysis to be completed. Therefore, there is a need for improved methods and systems that enable a computer system to increase the performance of one or more applications according to the users' expectations.